package q27_removeElement;

import java.util.Arrays;

public class Solution_2 {
    public static void main(String[] args) {
        int[] nums = {1,2,3,4,2};
        System.out.println(removeElement(nums,2));
        System.out.println(Arrays.toString(nums));
    }

    public static int removeElement(int[] nums, int val) {
        // 双指针进一步优化，通过将两边指针置于两侧，通过判断是否为特定值来移动指针，最终对于整个数据仅需遍历一次
        int left = 0;
        int right = nums.length;
        while (left < right) {
            // 循环内是没有if判断体之外能够移动指针的条件的，因此最终一定能结束循环，并且仅遍历数组一次
            // 例如 1，2，3，4，2 需要删除 2 ，那么当left到2时，仅right--，然后继续判断nums[left] == val，发现仍然是2
            // 则继续替代为下一个nums[right - 1]
            if (nums[left] == val) {
                nums[left] = nums[right - 1];
                right--;
            } else {
                left++;
            }
        }
        return left;

    }
}
